Mobility, Latent Trend and Omega for all states

  1. mobility trend for all states (spaghetti with mean).

Covariate that describes human mobility. These data come from Unacast. We smooth the raw data from Unacast using a spline fit, resulting in the trajectories of human movement shown below. This covariate is used to reduce baseline transmission. Here we show the mobility trends from all 50 states.


  1. latent trend for all states (spaghetti with mean).

  1. omega for all states (spaghetti with mean).

Correlation between Omega and Prevalence

  1. predictor = omega(t); response = daily prevalence(t)


California, and mean across states, at varying lags


  1. predictor = AUC of omega over time; response = cumulative all infections over time


  1. predictor = AUC of omega; response = cumulative all infections

  1. map of same (correlation, by state)

To be made

Correlation between Mobility and Omega

LS0tCnRpdGxlOiAiRmlndXJlcyIKb3V0cHV0OiBodG1sX25vdGVib29rCmF1dGhvcjogRXJpYyBNYXJ0eQotLS0KCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGluY2x1ZGU9VFJVRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LndpZHRoID0gIjEwMCUiKQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGNvd3Bsb3QpCmxpYnJhcnkoeWFyZHN0aWNrKQpsaWJyYXJ5KGdncHVicikKYGBgCgpgYGB7ciBkYXRhfQphbGxfZmlsZXMgPC0gbGlzdC5maWxlcyhwYXRoID0gaGVyZSgib3V0cHV0L2N1cnJlbnQvIiksIHBhdHRlcm4gPSAiLmNzdiIpCnBhcmFtX2ZpbGVzIDwtIGxpc3QuZmlsZXMocGF0aCA9IGhlcmUoIm91dHB1dC9jdXJyZW50LyIpLCBwYXR0ZXJuID0gInBhcmFtcy1uYXR1cmFsLnJkcyIpCnN0YXRlX3N1bW1hcmllcyA8LSB0aWJibGUoKQpzdGF0ZV9wYXJhbWV0ZXJzIDwtIHRpYmJsZSgpCnN0YXRlX2xvZ2xpa3MgPC0gdGliYmxlKCkKc3RhdGVkZiA8LXJlYWRSRFMoaGVyZSgib3V0cHV0L2N1cnJlbnQiLCAic3RhdGVkZi5yZHMiKSkKZm9yKGkgaW4gMTpsZW5ndGgoYWxsX2ZpbGVzKSkgewogIGRvX2ZpbGUgPC0gYWxsX2ZpbGVzW2ldCiAgbG9jYXRpb24gPC0gc3ViKCIuY3N2IiwgIiIsIGRvX2ZpbGUpCiAgc3RhdGVfbWV0YWRhdGEgPC0gc3RhdGVkZiAlPiUgZmlsdGVyKHN0YXRlX2Z1bGwgPT0gc3ViKCIuY3N2IiwgIiIsIGRvX2ZpbGUpKQogIHN0YXRlX3BvcCA8LSBzdGF0ZV9tZXRhZGF0YSAlPiUgcHVsbCh0b3RhbF9wb3ApCiAgc3RhdGVfaW5pdFIwIDwtIHN0YXRlX21ldGFkYXRhICU+JSBwdWxsKGluaXRSMCkKICBzdGF0ZV9iZXRhX3MgPC0gKHN0YXRlX2luaXRSMCouMSkKICAKICAKICB0bXBmaWxlIDwtIGhlcmUoIm91dHB1dC9jdXJyZW50IiwgZG9fZmlsZSkKICB0bXAgPC0gcmVhZC5jc3YodG1wZmlsZSkgJT4lCiAgICBmaWx0ZXIoc2ltX3R5cGUgPT0gInN0YXR1c19xdW8iIHwgaXMubmEoc2ltX3R5cGUpLAogICAgICAgICAgIHZhcmlhYmxlICVpbiUgYygiZGFpbHlfY2FzZXMiLCAiZGFpbHlfZGVhdGhzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjdHVhbF9kYWlseV9jYXNlcyIsICJhY3R1YWxfZGFpbHlfZGVhdGhzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vYmlsaXR5X3RyZW5kIiwgImxhdGVudF90cmVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zIiwgImRhaWx5X2FsbF9pbmZlY3Rpb25zIikpICU+JQogICAgbXV0YXRlKGRhdGUgPSBhcy5EYXRlKGRhdGUpKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QobG9jYXRpb24sIHNpbV90eXBlLCBwZXJpb2QsIGRhdGUsIHZhcmlhYmxlLCBtZWFuX3ZhbHVlKSAlPiUgCiAgICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gdmFyaWFibGUsIHZhbHVlc19mcm9tID0gbWVhbl92YWx1ZSkgJT4lCiAgICBtdXRhdGUoYmV0YV9zID0gc3RhdGVfYmV0YV9zKSAlPiUgCiAgICBtdXRhdGUocHJldmFsZW5jZSA9IGRhaWx5X2FsbF9pbmZlY3Rpb25zIC8gc3RhdGVfcG9wKSAlPiUgCiAgICBtdXRhdGUob21lZ2EgPSBtb2JpbGl0eV90cmVuZCAqIGxhdGVudF90cmVuZCAqIGJldGFfcykgJT4lIAogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAhYyhsb2NhdGlvbiwgc2ltX3R5cGUsIHBlcmlvZCwgZGF0ZSksIAogICAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgCiAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gIm1lYW5fdmFsdWUiLAogICAgICAgICAgICAgICAgIHZhbHVlc19kcm9wX25hID0gVFJVRSkKCiAgc3RhdGVfc3VtbWFyaWVzIDwtIGJpbmRfcm93cyhzdGF0ZV9zdW1tYXJpZXMsIHRtcCkgIyA/IHdhcyB0aGlzIG1pc3Npbmc/CgogIHRtcHBhcmFtZmlsZSA8LSBoZXJlKCJvdXRwdXQvY3VycmVudCIsIHBhcmFtX2ZpbGVzW2ldKQogIHRtcHBhcmFtcyA8LSByZWFkUkRTKHRtcHBhcmFtZmlsZSkKICB0bXBfbG9nbGlrIDwtIGRhdGEuZnJhbWUobG9jYXRpb24gPSB1bmlxdWUodG1wJGxvY2F0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2xpayA9IHRtcHBhcmFtc1siTG9nTGlrIiwgMl0pCiAgcm5tcyA8LSByb3cubmFtZXModG1wcGFyYW1zKQogIHRtcHBhcmFtcyA8LSB0bXBwYXJhbXMgJT4lCiAgICBtdXRhdGUocGFyYW1ldGVyID0gcm5tcykgJT4lCiAgICBmaWx0ZXIoaXNfZml0dGVkID09ICJ5ZXMiKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QoLWlzX2ZpdHRlZCkgJT4lCiAgICBnYXRoZXIoImtleSIsICJ2YWx1ZSIsIC1wYXJhbWV0ZXIpICU+JQogICAgZmlsdGVyKGtleSA9PSAiWDEiKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QoLWtleSkgJT4lCiAgICBtdXRhdGUobG9jYXRpb24gPSB1bmlxdWUodG1wJGxvY2F0aW9uKSkgJT4lCiAgICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCB2YWx1ZSwgcGFyYW1ldGVyKQogIAogIHN0YXRlX3BhcmFtZXRlcnMgPC0gYmluZF9yb3dzKHN0YXRlX3BhcmFtZXRlcnMsIHRtcHBhcmFtcykKICBzdGF0ZV9sb2dsaWtzIDwtIGJpbmRfcm93cyhzdGF0ZV9sb2dsaWtzLCB0bXBfbG9nbGlrKQp9CgojIEZpeGVkIHBhcmFtZXRlcnMgdGFibGUKYmV0YXNfbmFtZXMgPC0gcm5tc1tncmVwKCJiWzAtOV0rIiwgcm5tcyldICMgZmluZCBwYXJhbWV0ZXJzIHN0YXJ0aW5nIHdpdGggYiBmb2xsb3dlZCBieSBhbnkgbnVtYmVyCnNwbGluZV9jb2VmZmljaWVudHMgPC0gcGFzdGUoIlNwbGluZSBjb2VmZmljaWVudCIsIGdzdWIoImIiLCIiLCBiZXRhc19uYW1lcykpCm5hbWVzKHNwbGluZV9jb2VmZmljaWVudHMpIDwtIGJldGFzX25hbWVzCgpwYXJhbXNfdmVjIDwtIGMoTUlGX0lEID0gIk1JRiBpZCIsIAogICAgICAgICAgICAgICAgTG9nTGlrID0gIkxvZyBMaWtlbGlob29kIiwgCiAgICAgICAgICAgICAgICBMb2dMaWtfU0UgPSAiU0Ugb2YgTG9nIExpa2VsaWhvb2QiLCAKICAgICAgICAgICAgICAgIGJldGFfcyA9ICJUcmFuc21pc3Npb24gcmF0ZSIsCiAgICAgICAgICAgICAgICAjIFJlbGF0aXZlIFRyYW5zbWlzc2liaWxpdHkKICAgICAgICAgICAgICAgIGZyYWNfdHJhbnNfZSA9ICJSZWxhdGl2ZSB0cmFuc21pc3NpYmlsaXR5IG9mIGxhdGVudCBpbmZlY3Rpb25zIiwKICAgICAgICAgICAgICAgIGZyYWNfdHJhbnNfYSA9ICJSZWxhdGl2ZSB0cmFuc21pc3NpYmlsaXR5IG9mIGFzeW1wdG9tYXRpYyBpbmRpdmlkdWFscyIsCiAgICAgICAgICAgICAgICBmcmFjX3RyYW5zX2MgPSAiUmVsYXRpdmUgdHJhbnNtaXNzaWJpbGl0eSBvZiBkZXRlY3RlZCBzeW1wdG9tYXRpYyBpbmRpdmlkdWFscyBwb3N0LXJlcG9ydGluZyIsCiAgICAgICAgICAgICAgICBmcmFjX3RyYW5zX2ggPSAiUmVsYXRpdmUgdHJhbnNtaXNzaWJpbGl0eSBvZiBob3NwaXRhbGl6ZWQgaW5kaXZpZHVhbHMiLAogICAgICAgICAgICAgICAgIyBUaW1lIGluIGNvbXBhcnRtZW50cwogICAgICAgICAgICAgICAgdGltZV9lID0gIlRpbWUgc3BlbnQgaW4gbGF0ZW50IGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9hID0gIlRpbWUgc3BlbnQgaW4gYXN5bXB0b21hdGljIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9zdSA9ICJUaW1lIHNwZW50IGluIHN5bXB0b21hdGljLCB1bmRldGVjdGVkIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9zZCA9ICJUaW1lIHNwZW50IGluIHN5bXB0b21hdGljLCBkZXRlY3RlZCBjb21wYXJ0bWVudHMgKGRheXMpIiwKICAgICAgICAgICAgICAgIHRpbWVfYyA9ICJUaW1lIHNwZW50IGluIGRpYWdub3NlZCBjYXNlcyBjb21wYXJ0bWVudHMgKGRheXMpIiwKICAgICAgICAgICAgICAgIHRpbWVfaCA9ICJUaW1lIHNwZW50IGluIGhvc3BpdGFsaXplZCBjb21wYXJ0bWVudHMgKGRheXMpIiwKICAgICAgICAgICAgICAgICMgRGV0ZWN0aW9uIHRpbWUKICAgICAgICAgICAgICAgIG1heF9kaWFnX2ZhY3RvciA9ICJNYXhpbXVtIGZvciBmYWN0b3IgYnkgd2hpY2ggbW92ZW1lbnQgdGhyb3VnaCBJc2QgaGFwcGVucyBmYXN0ZXIgKHF1aWNrZXIgZGlhZ25vc2lzKSIsCiAgICAgICAgICAgICAgICBkaWFnX3JhbXB1cCA9ICJSYXRlIGF0IHdoaWNoIGZhc3RlciBkaWFnbm9zaXMgcmFtcHMgdXAgdG8gbWF4IiwKICAgICAgICAgICAgICAgIHRfaGFsZl9kaWFnID0gIlRpbWUgYXQgd2hpY2ggZGlhZ25vc2lzIGlzIGF0IDUwJSBvZiBtYXggKGluIGRheXMgc2luY2UgdCA9IDEpIiwKICAgICAgICAgICAgICAgICMgRGV0ZWN0aW9uIGZyYWN0aW9uCiAgICAgICAgICAgICAgICBtYXhfZGV0ZWN0X2ZyYWMgPSAiTWF4aW11bSBmcmFjdGlvbiBvZiBjYXNlcyB0aGF0IGFyZSBkZXRlY3RlZCIsCiAgICAgICAgICAgICAgICBkZXRlY3RfcmFtcHVwID0gIlNwZWVkIGF0IHdoaWNoIGZyYWN0aW9uIGRldGVjdGVkIHJhbXBzIHVwIiwKICAgICAgICAgICAgICAgIHRfaGFsZl9kZXRlY3QgPSAiVGltZSBhdCB3aGljaCBpbmZlY3Rpb24gZGV0ZWN0aW9uIGZyYWN0aW9uIGlzIGF0IDUwJSBvZiBtYXggKGluIGRheXMgc2luY2UgdCA9IDEpIiwKICAgICAgICAgICAgICAgIGJhc2VfZGV0ZWN0X2ZyYWMgPSAiTWluaW11bSBmcmFjdGlvbiBkZXRlY3RlZCBhdCB0ID0gMSIsCiAgICAgICAgICAgICAgICAjIEZyYWN0aW9uIGFzeW1wdG9tYXRpYwogICAgICAgICAgICAgICAgZnJhY19hc3ltID0gIkZyYWN0aW9uIG9mIGxhdGVudCBpbmZlY3Rpb25zIHRoYXQgbW92ZSB0byBhc3ltcHRvbWF0aWMiLAogICAgICAgICAgICAgICAgIyBGcmFjdGlvbiBob3NwdGlsaXplZAogICAgICAgICAgICAgICAgZnJhY19ob3NwID0gIkZyYWN0aW9uIG9mIGRldGVjdGVkIGNhc2VzIHRoYXQgYXJlIGhvc3BpdGFsaXplZCIsCiAgICAgICAgICAgICAgICAjIEZyYWN0aW9uIG9mIGhvc3BpdGFsaXphdGlvbnMgdGhhdCByZXN1bHQgaW4gZGVhdGgKICAgICAgICAgICAgICAgIG1pbl9mcmFjX2RlYWQgPSAiTWF4aW11bSBmcmFjdGlvbiBvZiBob3NwaXRhbGl6YXRpb25zIHRoYXQgcmVzdWx0IGluIGRlYXRoIiwKICAgICAgICAgICAgICAgIG1heF9mcmFjX2RlYWQgPSAiTWF4aW11bSBmcmFjdGlvbiBvZiBob3NwaXRhbGl6YXRpb25zIHRoYXQgcmVzdWx0IGluIGRlYXRoIiwKICAgICAgICAgICAgICAgIGxvZ19oYWxmX2RlYWQgPSAiVGltZSBhdCB3aGljaCBkZWF0aCBmcmFjdGlvbiBpcyBhdCA1MCUgb2YgbWF4IChpbiBkYXlzIHNpbmNlIHQgPSAxKSIsCiAgICAgICAgICAgICAgICAjIERpc3BlcnNpb24gcGFyYW1ldGVycwogICAgICAgICAgICAgICAgdGhldGFfY2FzZXMgPSAiRGlzcGVyc2lvbiBwYXJhbWV0ZXIgZm9yIGNhc2UgcmVwb3J0aW5nIG9ic2VydmF0aW9uIHByb2Nlc3MiLAogICAgICAgICAgICAgICAgdGhldGFfaG9zcHMgPSAiRGlzcGVyc2lvbiBwYXJhbWV0ZXIgZm9yIGhvc3BpdGFsaXphdGlvbiByZXBvcnRpbmcgb2JzZXJ2YXRpb24gcHJvY2VzcyIsCiAgICAgICAgICAgICAgICB0aGV0YV9kZWF0aHMgPSAiRGlzcGVyc2lvbiBwYXJhbWV0ZXIgZm9yIGRlYXRoIHJlcG9ydGluZyBvYnNlcmNhdGlvbiBwcm9jZXNzIiwKICAgICAgICAgICAgICAgIHNpZ21hX2R3ID0gIlZhcmlhbmNlIG9mIHRoZSBzdG9jaGFzdGljcyBwcm9jZXNzIG5vaXNlIiwKICAgICAgICAgICAgICAgICMgU3BsaW5lIGNvZWZmaWNpZW50cwogICAgICAgICAgICAgICAgc3BsaW5lX2NvZWZmaWNpZW50cywKICAgICAgICAgICAgICAgICMgSW5pdGlhbCBjb25kaXRpb25zCiAgICAgICAgICAgICAgICBTXzAgPSAiSW5pdGlhbCBudW1iZXIgb2Ygc3VzY2VwdGlibGUgaW5kaXZpZHVhbHMgb24gdCA9IDEiLAogICAgICAgICAgICAgICAgRTFfMCA9ICJJbml0aWFsIG51bWJlciBvZiBsYXRlbnQgaW5mZWN0aW91cyBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBJYTFfMCA9ICJJbml0aWFsIG51bWJlciBvZiBhc3ltcHRvbWF0aWMgaW5kaXZpZHVhbHMgb24gdCA9IDEiLAogICAgICAgICAgICAgICAgSXN1MV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIHN5bXB0b21hdGljLCB1bmRldGVjdGVkIGluZGl2aWR1YWxzIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIElzZDFfMCA9ICJJbml0aWFsIG51bWJlciBvZiBzeW1wdG9tYXRpYywgZGV0ZWN0ZWQgaW5kaXZpZHVhbHMgb24gdCA9IDEiLAogICAgICAgICAgICAgICAgQzFfMCA9ICJJbml0aWFsIG51bWJlciBvZiBkaWFnbm9zZWQgY2FzZXMgb24gdCA9IDEiLAogICAgICAgICAgICAgICAgSDFfMCA9ICJJbml0aWFsIG51bWJlciBvZiBob3NwaXRhbGl6ZWQgY2FzZXMgb24gdCA9IDEiLAogICAgICAgICAgICAgICAgUl8wID0gIkluaXRpYWwgbnVtYmVyIG9mIHJlY292ZXJlZCBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBEXzAgPSAiSW5pdGlhbCBudW1iZXIgb2YgZGVhdGhzIGFmdGVyIGhvc3BpdGFsaXphdGlvbiBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICB0cmVuZF9zdGFydCA9ICJUcmVuZCIpCgp0bXBwYXJhbXMgPC0gcmVhZFJEUyh0bXBwYXJhbWZpbGUpCnJubXMgPC0gcm93Lm5hbWVzKHRtcHBhcmFtcykKcGFyYW1zX21hcCA8LSB0aWJibGUoUGFyYW1ldGVyID0gbmFtZXMocGFyYW1zX3ZlYyksCiAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0gcGFyYW1zX3ZlYykKZml4ZWRfcGFyYW1ldGVycyA8LSB0bXBwYXJhbXMgJT4lCiAgbXV0YXRlKFBhcmFtZXRlciA9IHJubXMpICU+JQogIGZpbHRlcihpc19maXR0ZWQgPT0gIm5vIikgJT4lCiAgZHBseXI6OnNlbGVjdCgtaXNfZml0dGVkKSAlPiUKICBnYXRoZXIoImtleSIsICJ2YWx1ZSIsIC1QYXJhbWV0ZXIpICU+JQogIGZpbHRlcihrZXkgPT0gIlgxIikgJT4lCiAgbGVmdF9qb2luKHBhcmFtc19tYXAsIGJ5ID0gIlBhcmFtZXRlciIpICU+JQogIGZpbHRlcighUGFyYW1ldGVyICVpbiUgYygiTUlGX0lEIiwgIkxvZ0xpayIsICJMb2dMaWtfU0UiLCAidHJlbmRfc3RhcnQiLCAidGhldGFfaG9zcHMiLCAiU18wIikpICU+JQogIGRwbHlyOjpzZWxlY3QoUGFyYW1ldGVyLCBEZXNjcmlwdGlvbiwgdmFsdWUpICU+JQogIG11dGF0ZShQYXJhbWV0ZXIgPSBpZmVsc2UoUGFyYW1ldGVyID09ICJFMV8wIiwgIkwxXzAiLCBQYXJhbWV0ZXIpKQoKZnV0dXJlIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUgZmlsdGVyKHBlcmlvZCA9PSAiRnV0dXJlIikgJT4lIHB1bGwoZGF0ZSkgJT4lIHJhbmdlKCkKYnVybmluIDwtIGMoc3RhdGVfc3VtbWFyaWVzICU+JSBwdWxsKGRhdGUpICU+JSBtaW4oKSwgYXMuRGF0ZSgiMjAyMC0wMi0yNSIpKQoKCmBgYAoKIyBNb2JpbGl0eSwgTGF0ZW50IFRyZW5kIGFuZCBPbWVnYSBmb3IgYWxsIHN0YXRlcwoKYSkgbW9iaWxpdHkgdHJlbmQgZm9yIGFsbCBzdGF0ZXMgKHNwYWdoZXR0aSB3aXRoIG1lYW4pLiAgCgpDb3ZhcmlhdGUgdGhhdCBkZXNjcmliZXMgaHVtYW4gbW9iaWxpdHkuIFRoZXNlIGRhdGEgY29tZSBmcm9tIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnVuYWNhc3QuY29tLyIgdGFyZ2V0PSJfYmxhbmsiPlVuYWNhc3Q8L2E+LiBXZSBzbW9vdGggdGhlIHJhdyBkYXRhIGZyb20gVW5hY2FzdCB1c2luZyBhIHNwbGluZSBmaXQsIHJlc3VsdGluZyBpbiB0aGUgdHJhamVjdG9yaWVzIG9mIGh1bWFuIG1vdmVtZW50IHNob3duIGJlbG93LiBUaGlzIGNvdmFyaWF0ZSBpcyB1c2VkIHRvIHJlZHVjZSBiYXNlbGluZSB0cmFuc21pc3Npb24uCkhlcmUgd2Ugc2hvdyB0aGUgbW9iaWxpdHkgdHJlbmRzIGZyb20gYWxsIDUwIHN0YXRlcy4KCmBgYHtyIGNvdmFyaWF0ZSwgZmlnLmhlaWdodD0zLCBmaWcud2lkdGg9NywgZXZhbCA9IFRSVUV9CmFsbF9waGkgPC0gc3RhdGVfc3VtbWFyaWVzICU+JQogIGZpbHRlcih2YXJpYWJsZSA9PSAibW9iaWxpdHlfdHJlbmQiKSAlPiUKICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCBkYXRlLCBtZWFuX3ZhbHVlKSAlPiUKICByZW5hbWUocGhpID0gbWVhbl92YWx1ZSkgJT4lIAogIGZpbHRlcihkYXRlIDw9IFN5cy5EYXRlKCkpCgptZWFuX3BoaSA8LSBhbGxfcGhpICU+JSBncm91cF9ieShkYXRlKSAlPiUgc3VtbWFyaXNlKHBoaSA9IG1lYW4ocGhpKSkKCmdfcGhpIDwtIGdncGxvdChhbGxfcGhpLCBhZXMoeCA9IGRhdGUsIHkgPSBwaGksIGNvbG9yID0gbG9jYXRpb24pKSArCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUpICsKICAjIHlsYWIoIkh1bWFuIG1vdmVtZW50XG4oJSBvZiBub3JtYWwpIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMSksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfZChvcHRpb24gPSAiRCIsIGRpcmVjdGlvbiA9IC0xLCBhbHBoYSA9IC42LCBlbmQgPSAuNzUpICsKICAjIHRoZW1lX2RhcmsoYmFzZV9saW5lX3NpemUgPSAwLjUpICsKICBnZW9tX2xpbmUoZGF0YSA9IG1lYW5fcGhpLCBhbHBoYSA9IC42LCBzaXplID0gMiwgY29sb3IgPSAncmVkJywgbmFtZT0iTWVhbiBvZiBhbGwgc3RhdGVzIikgKwogICMgZ2VvbV9yZWN0KGFlcyh4bWluPWZ1dHVyZVsxXSwgeG1heD1mdXR1cmVbMl0sIHltaW49MCwgeW1heD0xKSkgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IGZ1dHVyZVsxXSwgeG1heCA9IGZ1dHVyZVsyXSwgeW1pbiA9IDAsIHltYXggPSAxLCBhbHBoYSA9IC4yKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBndWlkZXMoY29sb3IgPSBGQUxTRSkKCnBfcGhpIDwtIGdfcGhpICU+JSBwbG90bHk6OmdncGxvdGx5KCkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHNob3dsZWdlbmQgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAjIG1hcmdpbiA9IGxpc3QobCA9IDE1MCksCiAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkh1bWFuIG1vdmVtZW50IChwaGkpXG4oJSBvZiBub3JtYWwpXG4mbmJzcDsiKQogICAgICAgICAgICAgICAgICkKcF9waGkKYGBgCgotLS0KCmIpIGxhdGVudCB0cmVuZCBmb3IgYWxsIHN0YXRlcyAoc3BhZ2hldHRpIHdpdGggbWVhbikuICAKCmBgYHtyfQphbGxfcHNpIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIodmFyaWFibGUgPT0gImxhdGVudF90cmVuZCIpICU+JQogIGRwbHlyOjpzZWxlY3QobG9jYXRpb24sIGRhdGUsIG1lYW5fdmFsdWUpICU+JQogIHJlbmFtZShwc2kgPSBtZWFuX3ZhbHVlKSAlPiUgCiAgZmlsdGVyKGRhdGUgPD0gU3lzLkRhdGUoKSkKCm1lYW5fcHNpIDwtIGFsbF9wc2kgJT4lIGdyb3VwX2J5KGRhdGUpICU+JSBzdW1tYXJpc2UocHNpID0gbWVhbihwc2kpKQoKZ19wc2kgPC0gZ2dwbG90KGFsbF9wc2ksIGFlcyh4ID0gZGF0ZSwgeSA9IHBzaSwgY29sb3IgPSBsb2NhdGlvbikpICsKICBnZW9tX2xpbmUoc2l6ZSA9IDAuNSkgKwogICMgeWxhYigiTGF0ZW50IHRyZW5kXG4oJSBvZiBub3JtYWwpIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMSksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfZChvcHRpb24gPSAiRCIsIGRpcmVjdGlvbiA9IC0xLCBhbHBoYSA9IC42LCBlbmQgPSAuNzUpICsKICAjIHRoZW1lX2RhcmsoYmFzZV9saW5lX3NpemUgPSAwLjUpICsKICBnZW9tX2xpbmUoZGF0YSA9IG1lYW5fcHNpLCBhbHBoYSA9IC42LCBzaXplID0gMiwgY29sb3IgPSAncmVkJywgbmFtZT0iTWVhbiBvZiBhbGwgc3RhdGVzIikgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IGZ1dHVyZVsxXSwgeG1heCA9IGZ1dHVyZVsyXSwgeW1pbiA9IDAsIHltYXggPSAxLCBhbHBoYSA9IC4yKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBndWlkZXMoY29sb3IgPSBGQUxTRSkKCnBfcHNpIDwtIGdfcHNpICU+JSBwbG90bHk6OmdncGxvdGx5KCkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHNob3dsZWdlbmQgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAjIG1hcmdpbiA9IGxpc3QobCA9IDE1MCksCiAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkxhdGVudCB0cmVuZCAocHNpKVxuKCUgb2Ygbm9ybWFsKVxuJm5ic3A7IikKICAgICAgICAgICAgICAgICApCnBfcHNpCmBgYAoKLS0tCgpjKSBvbWVnYSBmb3IgYWxsIHN0YXRlcyAoc3BhZ2hldHRpIHdpdGggbWVhbikuIAoKYGBge3J9CmFsbF9vbWVnYSA8LSBzdGF0ZV9zdW1tYXJpZXMgJT4lCiAgZmlsdGVyKHZhcmlhYmxlID09ICJvbWVnYSIpICU+JQogIGRwbHlyOjpzZWxlY3QobG9jYXRpb24sIGRhdGUsIG1lYW5fdmFsdWUpICU+JQogIHJlbmFtZShvbWVnYSA9IG1lYW5fdmFsdWUpICU+JSAKICBmaWx0ZXIoZGF0ZSA8PSBTeXMuRGF0ZSgpKQoKbWVhbl9vbWVnYSA8LSBhbGxfb21lZ2EgJT4lIGdyb3VwX2J5KGRhdGUpICU+JSBzdW1tYXJpc2Uob21lZ2EgPSBtZWFuKG9tZWdhKSkKCmdfb21lZ2EgPC0gZ2dwbG90KGFsbF9vbWVnYSwgYWVzKHggPSBkYXRlLCB5ID0gb21lZ2EsIGNvbG9yID0gbG9jYXRpb24pKSArCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUpICsKICAjIHlsYWIoIkxhdGVudCB0cmVuZFxuKCUgb2Ygbm9ybWFsKSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2Qob3B0aW9uID0gIkQiLCBkaXJlY3Rpb24gPSAtMSwgYWxwaGEgPSAuNiwgZW5kID0gLjc1KSArCiAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBtZWFuX29tZWdhLCBhbHBoYSA9IC42LCBzaXplID0gMiwgY29sb3IgPSAncmVkJywgbmFtZT0iTWVhbiBvZiBhbGwgc3RhdGVzIikgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IGZ1dHVyZVsxXSwgeG1heCA9IGZ1dHVyZVsyXSwgeW1pbiA9IDAsIHltYXggPSAxLCBhbHBoYSA9IC4yKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBndWlkZXMoY29sb3IgPSBGQUxTRSkKCnBfb21lZ2EgPC0gZ19vbWVnYSAlPiUgcGxvdGx5OjpnZ3Bsb3RseSgpICU+JSAKICBwbG90bHk6OmxheW91dChzaG93bGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgIyBtYXJnaW4gPSBsaXN0KGwgPSAxNTApLAogICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJSZWxhdGl2ZSB0cmFuc21pc3Npb24gKG9tZWdhKVxuKCUgb2Ygbm9ybWFsKVxuJm5ic3A7IikKICAgICAgICAgICAgICAgICApCnBfb21lZ2EKYGBgCgojIENvcnJlbGF0aW9uIGJldHdlZW4gT21lZ2EgYW5kIFByZXZhbGVuY2UKCmEpIHByZWRpY3RvciA9IG9tZWdhKHQpOyByZXNwb25zZSA9IGRhaWx5IHByZXZhbGVuY2UodCkKCmBgYHtyfQoKYWxsX3ByZXZhbGVuY2UgPC0gc3RhdGVfc3VtbWFyaWVzICU+JQogIGZpbHRlcihwZXJpb2QgPT0gIlBhc3QiKSAlPiUKICBmaWx0ZXIodmFyaWFibGUgPT0gInByZXZhbGVuY2UiKSAlPiUKICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCBkYXRlLCBtZWFuX3ZhbHVlKSAlPiUKICByZW5hbWUocHJldmFsZW5jZSA9IG1lYW5fdmFsdWUpICU+JSAKICBmaWx0ZXIoZGF0ZSA8PSBTeXMuRGF0ZSgpKQoKbWVhbl9hbGxfcHJldmFsZW5jZSA8LSBhbGxfcHJldmFsZW5jZSAlPiUgZ3JvdXBfYnkoZGF0ZSkgJT4lIHN1bW1hcmlzZShwcmV2YWxlbmNlID0gbWVhbihwcmV2YWxlbmNlKSkKIyBwbG90KHggPSBtZWFuX29tZWdhJG1lYW5fdmFsdWUsIHkgPSBtZWFuX2FsbF9wcmV2YWxlbmNlJHByZXZhbGVuY2UpCgptZWFucyA8LSBtZWFuX3BoaSAlPiUgCiAgZnVsbF9qb2luKG1lYW5fcHNpKSAlPiUgCiAgZnVsbF9qb2luKG1lYW5fb21lZ2EpICU+JSAKICBmdWxsX2pvaW4obWVhbl9hbGxfcHJldmFsZW5jZSkKCnN0YXRlX3N1bW1hcmllc193aWRlIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIocGVyaW9kID09ICJQYXN0IikgJT4lCiAgZmlsdGVyKHNpbV90eXBlID09ICdzdGF0dXNfcXVvJykgJT4lIAogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSB2YXJpYWJsZSwgdmFsdWVzX2Zyb20gPSBtZWFuX3ZhbHVlKSAlPiUgCiAgZ3JvdXBfYnkobG9jYXRpb24pICU+JSAKICBtdXRhdGUoQVVfb21lZ2EgPSBjdW1zdW0ob21lZ2EpKQoKQ0EgPC0gc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIGZpbHRlcihsb2NhdGlvbiA9PSAiQ2FsaWZvcm5pYSIpCgpsYWdmaWxsIDwtIGZ1bmN0aW9uKHgsIGxhZyxmaWxsPTEpIHsKICByZXBsYWNlX25hKGxhZyh4LGxhZyksZmlsbCkKfQoKQ0EgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IE9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IHByZXZhbGVuY2U6ICcsIHByZXZhbGVuY2UsICc8L2JyPiBEYXRlOiAnLCBkYXRlKSkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkNhbGlmb3JuaWEiLHhheGlzPWxpc3QodGl0bGU9Im9tZWdhIikseWF4aXM9bGlzdCh0aXRsZT0icHJldmFsZW5jZSIpKQoKc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIGNvbG9yID0gfmxvY2F0aW9uLAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IE9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IHByZXZhbGVuY2U6ICcsIHByZXZhbGVuY2UsICc8L2JyPiBEYXRlOiAnLCBkYXRlLCAnPC9icj4gU3RhdGU6ICcsIGxvY2F0aW9uICkpICU+JSAKICAgIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkFsbCBzdGF0ZXMiLCB4YXhpcz1saXN0KHRpdGxlPSJvbWVnYSIpLHlheGlzPWxpc3QodGl0bGU9InByZXZhbGVuY2UiKSkKCm1lYW5zICU+JSBmaWx0ZXIoZGF0ZSA8IGZ1dHVyZVsxXSkgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5vbWVnYSwgeSA9IH5wcmV2YWxlbmNlLCAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBPbWVnYTogJywgb21lZ2EsICc8L2JyPiBwcmV2YWxlbmNlOiAnLCBwcmV2YWxlbmNlLCAnPC9icj4gRGF0ZTogJywgZGF0ZSApKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiTWVhbiBvbWVnYSwgbWVhbiBwcmV2YWxlbmNlIChhY3Jvc3Mgc3RhdGVzKSIseGF4aXM9bGlzdCh0aXRsZT0ib21lZ2EiKSx5YXhpcz1saXN0KHRpdGxlPSJwcmV2YWxlbmNlIikpCgpgYGAKCi0tLQoKQ2FsaWZvcm5pYSwgYW5kIG1lYW4gYWNyb3NzIHN0YXRlcywgYXQgdmFyeWluZyBsYWdzCgpgYGB7cn0KQ0EgJT4lIGZpbHRlcihwZXJpb2QgPT0gJ1Bhc3QnKSAlPiUgCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfmxhZ2ZpbGwob21lZ2EsMCksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMCIsCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIHRleHQgPSB+cGFzdGUoJzwvYnI+IE9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IHByZXZhbGVuY2U6ICcsIHByZXZhbGVuY2UsICc8L2JyPiBEYXRlOiAnLCBkYXRlKSkgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSw3KSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyA3IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSwxNCksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMTQiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDIxKSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAyMSIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsMjgpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDI4IikgJT4lIAogIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkNhbGlmb3JuaWEsIG9tZWdhIGF0IHZhcnlpbmcgbGFncyIsIHhheGlzID0gbGlzdCh0aXRsZSA9ICJvbWVnYSIpKQoKbWVhbnMgJT4lIGZpbHRlcihkYXRlIDwgZnV0dXJlWzFdKSAlPiUgCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfmxhZ2ZpbGwob21lZ2EsMCksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMCIsCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIHRleHQgPSB+cGFzdGUoJzwvYnI+IE9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IHByZXZhbGVuY2U6ICcsIHByZXZhbGVuY2UsICc8L2JyPiBEYXRlOiAnLCBkYXRlKSkgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSw3KSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyA3IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSwxNCksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMTQiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDIxKSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAyMSIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsMjgpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDI4IikgJT4lIAogIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIk1lYW4gb21lZ2EsIG1lYW4gcHJldmFsZW5jZSAoYWNyb3NzIHN0YXRlcylcbm9tZWdhIGF0IHZhcnlpbmcgbGFncyIsIHhheGlzID0gbGlzdCh0aXRsZSA9ICJvbWVnYSIpKQoKYGBgCgotLS0KCmIpIHByZWRpY3RvciA9IEFVQyBvZiBvbWVnYSBvdmVyIHRpbWU7IHJlc3BvbnNlID0gY3VtdWxhdGl2ZSBhbGwgaW5mZWN0aW9ucyBvdmVyIHRpbWUKCmBgYHtyfQoKQ0EgJT4lIGZpbHRlcihwZXJpb2QgPT0gJ1Bhc3QnKSAlPiUgCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsMCksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgbmFtZSA9ICdsYWcgMCcsIAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IEFyZWEgdW5kZXIgT21lZ2E6ICcsIEFVX29tZWdhLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IEN1bXVsYXRpdmUgaW5mZWN0aW9uczogJywgY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2JyPiBEYXRlOiAnLCBkYXRlKSkgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChBVV9vbWVnYSw3KSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCBuYW1lID0gImxhZyA3IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChBVV9vbWVnYSwxNCksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgbmFtZSA9ICJsYWcgMTQiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKEFVX29tZWdhLDIxKSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCBuYW1lID0gImxhZyAyMSIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsMjgpLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAibGFnIDI4IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChBVV9vbWVnYSw1NiksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgbmFtZSA9ICJsYWcgNTYiKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQ2FsaWZvcm5pYSwgYXJlYSB1bmRlciBvbWVnYSBhdCB2YXJ5aW5nIGxhZ3MiLHhheGlzPWxpc3QodGl0bGU9IkFyZWEgdW5kZXIgb21lZ2EiKSx5YXhpcz1saXN0KHRpdGxlPSJDdW11bGF0aXZlIGluZmVjdGlvbnMiKSkKCnN0YXRlX3N1bW1hcmllc193aWRlICU+JSBmaWx0ZXIocGVyaW9kID09ICdQYXN0JykgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKEFVX29tZWdhLDApLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIGNvbG9yID0gfmxvY2F0aW9uLAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IEFyZWEgdW5kZXIgT21lZ2E6ICcsIEFVX29tZWdhLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IEN1bXVsYXRpdmUgaW5mZWN0aW9uczogJywgY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2JyPiBEYXRlOiAnLCBkYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gU3RhdGU6ICcsIGxvY2F0aW9uKSkgJT4lIAogICAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQWxsIHN0YXRlcyIsIHhheGlzPWxpc3QodGl0bGU9IkFyZWEgdW5kZXIgb21lZ2EgKGxhZyAwKSIpLCB5YXhpcz1saXN0KHRpdGxlPSJDdW11bGF0aXZlIGluZmVjdGlvbnMiKSkKCgpgYGAKCi0tLQoKYykgcHJlZGljdG9yID0gQVVDIG9mIG9tZWdhOyByZXNwb25zZSA9IGN1bXVsYXRpdmUgYWxsIGluZmVjdGlvbnMKCmBgYHtyfQpzdGF0ZV9zdW1tYXJpZXNfd2lkZSAlPiUgCiAgZmlsdGVyKHBlcmlvZCA9PSAnUGFzdCcpICU+JSAKICBncm91cF9ieShsb2NhdGlvbikgJT4lIAogIHN1bW1hcmlzZShBVV9vbWVnYSA9IG1heChBVV9vbWVnYSksIGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMgPSBtYXgoY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucykpICU+JSAKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+QVVfb21lZ2EsIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBBcmVhIHVuZGVyIE9tZWdhOiAnLCBBVV9vbWVnYSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2JyPiBDdW11bGF0aXZlIGluZmVjdGlvbnM6ICcsIGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gU3RhdGU6ICcsIGxvY2F0aW9uKSkgJT4lIAogICAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQ29ycmVsYXRpb24gb2YgY3VtdWxhdGl2ZSBpbmZlY3Rpb24gd2l0aCBBcmVhIHVuZGVyIG9tZWdhIiwgeGF4aXM9bGlzdCh0aXRsZT0iQXJlYSB1bmRlciBvbWVnYSIpLCB5YXhpcz1saXN0KHRpdGxlPSJDdW11bGF0aXZlIGluZmVjdGlvbnMiKSkKYGBgCgotLS0KCmUpIG1hcCBvZiBzYW1lIChjb3JyZWxhdGlvbiwgYnkgc3RhdGUpCgpUbyBiZSBtYWRlCgojIENvcnJlbGF0aW9uIGJldHdlZW4gTW9iaWxpdHkgYW5kIE9tZWdhCgpgYGB7cn0KCkNBICU+JSAKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+bW9iaWxpdHlfdHJlbmQsIHkgPSB+b21lZ2EsIAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IE1vYmlsaXR5OiAnLCBtb2JpbGl0eV90cmVuZCwgJzwvYnI+IG9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IERhdGU6ICcsIGRhdGUpKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQ2FsaWZvcm5pYSIseGF4aXM9bGlzdCh0aXRsZT0ibW9iaWxpdHkgdHJlbmQiKSx5YXhpcz1saXN0KHRpdGxlPSJvbWVnYSIpKQoKQ0EgJT4lIHVuZ3JvdXAoKSAlPiUgZmlsdGVyKGRhdGUgPCBmdXR1cmVbMV0pICU+JSAKICBmaWx0ZXIoZGF0ZSA+IGJ1cm5pblsyXSkgJT4lCiAgc2VsZWN0KGRhdGUsbW9iaWxpdHlfdHJlbmQsb21lZ2EpICU+JSAKICBnZ3N0YXRzcGxvdDo6Z2dzY2F0dGVyc3RhdHMoeCA9ICJtb2JpbGl0eV90cmVuZCIsIHkgPSAib21lZ2EiLCB0eXBlID0gInNwZWFybWFuIiwgdGl0bGUgPSAiQ2FsaWZvcm5pYSIpCgoKc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5tb2JpbGl0eV90cmVuZCwgeSA9IH5vbWVnYSwgY29sb3IgPSB+bG9jYXRpb24sCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gTW9iaWxpdHk6ICcsIG1vYmlsaXR5X3RyZW5kLCAnPC9icj4gb21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gRGF0ZTogJywgZGF0ZSwgJzwvYnI+IFN0YXRlOiAnLCBsb2NhdGlvbiApKSAlPiUKICAgIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkFsbCBzdGF0ZXMiLCB4YXhpcz1saXN0KHRpdGxlPSJtb2JpbGl0eSB0cmVuZCIpLHlheGlzPWxpc3QodGl0bGU9Im9tZWdhIikpCgptZWFucyAlPiUgCiAgZmlsdGVyKGRhdGUgPCBmdXR1cmVbMV0pICU+JSAKICBmaWx0ZXIoZGF0ZSA+IGFzLkRhdGUoIjIwMjAtMDItMjUiKSkgJT4lICMgRmViIDI2IGlzIHRoZSBmaXJzdCBkYXkgd2l0aCBhbnkgbW9iaWxpdHkgPCAxCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfnBoaSwgeSA9IH5vbWVnYSwgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gTW9iaWxpdHk6ICcsIHBoaSwgJzwvYnI+IG9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IERhdGU6ICcsIGRhdGUpKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiTWVhbiBtb2JpbGl0eSwgbWVhbiBvbWVnYSAoYWNyb3NzIHN0YXRlcykiLHhheGlzPWxpc3QodGl0bGU9Im1vYmlsaXR5IHRyZW5kIikseWF4aXM9bGlzdCh0aXRsZT0ib21lZ2EiKSkKCmBgYAoKYGBge3J9CiMgbWVhbnMgJT4lIGZpbHRlcihkYXRlIDwgZnV0dXJlWzFdKSAlPiUgCiMgICBmaWx0ZXIoZGF0ZSA+IGJ1cm5pblsyXSkgJT4lCiMgICBnZ3NjYXR0ZXJoaXN0KHggPSAicGhpIiwgeSA9ICJvbWVnYSIsIAojICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgc2hhcGUgPSAxOSwgc2l6ZSA9IDMsICMgcG9pbnRzCiMgICAgICAgICAgIGFkZCA9ICJyZWcubGluZSIsIAojICAgICAgICAgICBhZGQucGFyYW1zID0gbGlzdChjb2xvciA9ICJibHVlIiwgZmlsbCA9ICJsaWdodGdyYXkiKSwKIyAgICAgICAgICAgY29uZi5pbnQgPSBUUlVFLCAKIyAgICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCBjb3IubWV0aG9kID0gInNwZWFybWFuIiwKIyAgICAgICAgICAgeGxhYiA9ICJtb2JpbGl0eSB0cmVuZCIsIHlsYWIgPSAib21lZ2EiLAojICAgICAgICAgICBtYXJnaW4ucGxvdCA9ICJkZW5zaXR5IiwKIyAgICAgICAgICAgbWFyZ2luLmdndGhlbWUgPSB0aGVtZV92b2lkKCksCiMgICAgICAgICAgIG1hcmdpbi5zcGFjZSA9IEZBTFNFLAojICAgICAgICAgICBtYWluLnBsb3Quc2l6ZSA9IDIsCiMgICAgICAgICAgIG1hcmdpbi5wbG90LnNpemUgPSAxCiMgICAgICAgICAgICkKCm1lYW5zICU+JSBmaWx0ZXIoZGF0ZSA8IGZ1dHVyZVsxXSkgJT4lIAogIGZpbHRlcihkYXRlID4gYnVybmluWzJdKSAlPiUKICBnZ3N0YXRzcGxvdDo6Z2dzY2F0dGVyc3RhdHMoeCA9ICJwaGkiLCB5ID0gIm9tZWdhIiwgdHlwZSA9ICJzcGVhcm1hbiIsIHRpdGxlID0gIk1lYW4gcGhpLCBNZWFuIG9tZWdhIG92ZXIgYWxsIHN0YXRlcyIpCgoKYGBgCgo=